package co.com.losalpes.marketplace.picontract.entities;

import co.com.losalpes.marketplace.picontract.bo.OfertaBO;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@NamedQueries({@javax.persistence.NamedQuery(name="getAllOfertas", query="SELECT P FROM Oferta P ")})
public class Oferta
  implements Serializable
{

  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  protected Long id;

  @Column
  @Temporal(TemporalType.DATE)
  protected Date fechaEntrega;

  @OneToOne
  protected Fabricante fabricante;

  @OneToOne
  private Producto productoOfrecido;

  @Column
  private Long valor;

  @Column
  private String numSeguimiento;

  public Oferta()
  {
    this.numSeguimiento = ("" + System.currentTimeMillis());
  }

  public Oferta(Long id, Date aTiempoOferta, Fabricante aFabricante, Producto prod, Long valor)
  {
    this.id = id;
    this.fechaEntrega = aTiempoOferta;
    this.fabricante = aFabricante;
    this.productoOfrecido = prod;
    this.valor = valor;
    this.numSeguimiento = ("" + System.currentTimeMillis());
  }

  public Oferta(OfertaBO ofertaBO)
  {
    setId(ofertaBO.getId());
    setFechaEntrega(ofertaBO.getFechaEntrega());
    setFabricante(new Fabricante(ofertaBO.getFabricante()));
    setProductoOfrecido(new Producto(ofertaBO.getProductoOfrecido()));
    setNumSeguimiento(ofertaBO.getNumSeguimiento());
    setValor(ofertaBO.getValor());
  }

  public OfertaBO toBO()
  {
    OfertaBO ofertaBO = new OfertaBO();
    ofertaBO.setId(getId());
    ofertaBO.setFechaEntrega(getFechaEntrega());
    ofertaBO.setProductoOfrecido(this.productoOfrecido.toBO());
    ofertaBO.setNumSeguimiento(getNumSeguimiento());
    ofertaBO.setValor(getValor());
    Fabricante aFabricante = getFabricante();
    if (aFabricante != null) {
      ofertaBO.setFabricante(aFabricante.toBO());
    }
    return ofertaBO;
  }

  public Long getId()
  {
    return this.id;
  }

  public void setId(Long id)
  {
    this.id = id;
  }

  public Fabricante getFabricante()
  {
    return this.fabricante;
  }

  public void setFabricante(Fabricante aFabricante)
  {
    this.fabricante = aFabricante;
  }

  public Producto getProductoOfrecido() {
    return this.productoOfrecido;
  }

  public void setProductoOfrecido(Producto productoOfrecido) {
    this.productoOfrecido = productoOfrecido;
  }

  public Date getFechaEntrega() {
    return this.fechaEntrega;
  }

  public void setFechaEntrega(Date frechaEntrega) {
    this.fechaEntrega = frechaEntrega;
  }

  public Long getValor() {
    return this.valor;
  }

  public void setValor(Long valor) {
    this.valor = valor;
  }

  public String getNumSeguimiento() {
    return this.numSeguimiento;
  }

  public void setNumSeguimiento(String numSeguimiento) {
    this.numSeguimiento = numSeguimiento;
  }
}